#使用open打开一个文件  此处的open返回值相当于一个"遥控器"， 称为"句柄（handler）"
f = open('E:\\pycharm project\\ForTest\\test1.txt', 'w')
"""
r -> read, w -> write, a -> append 追加写
"""
print(f)
print(type(f))

#使用close关闭一个文件  打开文件实际上是在申请系统资源，不再使用时，申请的资源就应该及时释放，否则就容易造成资源泄露
f.close

#打开文件的上限  一直打开但是没有关闭->系统崩溃
"""f_list = []
count = 0
while 1:
    f = open('E:/pycharm project/ForTest/test.txt', 'w')
    f_list.append(f)
    count += 1
    print(count)"""
#8189个 (8189 + 3(程序启动时已经默认打开了三个文件：标准输入，标准输出，标准错误) = 8192 => 2^13)
#Python 有一个重要的垃圾回收机制(GC)自动把不使用的变量释. 如果不对f操作（比如这里的f.append），f就会被自动释放

#使用write实现写文件 'w'modle: 先清空文件原有内容，再写入
f = open('E:/pycharm project/ForTest/test-w.txt', 'w')
count = 0
while count < 10:
    f.write("Hello\n")
    count += 1
f.close()

#'a'model: 在原有文件之后追加写入
f = open('E:/pycharm project/ForTest/test-a.txt', 'a')
count = 0
while count < 10:
    f.write("Hello\n")
    count += 1
f.close()

#1.使用read 来读取文件内容，指定读几个字符
f = open('E://pycharm project//ForTest//test.txt', 'r', encoding='utf8')
result = f.read(1)
print(result)
f.close()

#2.更常见的需求：按照行来读取
#最简单的的方法：直接For循环
f = open('E://pycharm project//ForTest//test.txt', 'r', encoding='utf8')
for line in f:
    print(f"line = {line}")
f.close()
#这里多了一个空行，是因为本来度到这一行的的内容本来就带一个换行\n  可以修改为print(f"line = {line}", end='')

#3.还可以使用readlines方法，直接把整个文件的内容读出来，按行组织到一个列表里
f = open('E://pycharm project//ForTest//test.txt', 'r', encoding='utf8')
lines = f.readlines()
print(lines)
f.close()

#上下文管理器
def func():
    #表示打开指定路径的文件，并将文件对象赋给f变量。当with块执行结束时，文件会自动关闭，无需显式调用f.close()。
    with open('E:/pycharm project/ForTest/test.txt', 'r', encoding='utf8') as f:

